Durable Objects とは?
https://scrapbox.io/files/674ea64e7b649fb514a3906a.webp
はじめまして倉橋 渉太です
Durable Objectsについてまとめてみました。
結論
リアルタイム通信と整合性のあるストレージの基盤を提供しているもの。
具体的に言うと、独自のリアルタイムデータベースを作成するための基盤のみを提供しているもの。
つまり、Firebase Realtime Databaseのようなリアルタイムのデータベースをを作る基盤だけ提供するからあとは独自のFirebase Realtime Databaseを作ってねって感じです
開発された背景
現状のデータベースの問題点
クラウドベースの、データベースは作成する際に地域(リージョン)を設定する必要があった。
また、現状のデータベースはリアルタイムに対応できるように設計されていない。
スップレッドシートなどリアルタイムに同時に編集する場合、どうしても遅延が起きてしまう。これは地域(リージョン)が遠いところからアクセスするとなおさら顕著になる。
例:リージョンを東京にした場合。 ブラジルから編集する人と東京から編集する人がいると遅延がとんでもないことになるよね?遠いから
じゃあリージョンを分けてブラジルならブラジルのデータベースに東京は東京のデータベースに保存すればいいのでは?となるが、その場合、整合性が取れなくなってしまう。リージョンが違うと別のデータベースだからね。
👆を解決するには、中間地点に調節するサーバーを設置する。Googleとかはこのようにして遅延を少なくしている。
Durable Objectsが解決するもの
Cloudflare Wokerはエッジコンピューティングと言う概念のもと(エッジサーバー)(エッジ)動作している。
👆ユーザーの近い場所で処理しようね。そうすると遅延も少ないし、パフォーマンスもいいよ🙌🙌って感じ
データベースもエッジ上で動作すればリアルタイムで通信できるんじゃね?
でも、ユーザーの近くで処理するから整合性とれなくない?
じゃあCloudflare側が整合性も取るしエッジ上で動作するから遅延もすくなくするよってことでできたのがDurable Objectsです。
Durable Objectsを使ってエッジ上で動作するリアルタイムデータベースをみんなで作ってWeb全体をリアルタイム通信が標準な世界にしていこうというものである。
詳しく
リアルタイムデータベースを構築するための基盤を提供するものです。
1. WebSocket通信のAPIを提供
Durable ObjectsはWebSocket通信のAPIが最初からあるため、それを使うことができる。
👆データをリアルタイムで受け取るまではDurable Objects側が自動でやるから、受け取った後に、そのデータをどうするかの処理をあなたが書いてねって感じ。
WebSocketをつなげていてもデータ受信がない場合つなぎっぱにすると無駄なリソースになるため一定時間通信がないと休止状態に入る。再度データが来たら再起動する。もちろん休止前の状態から復活する。コストも最適化してくれる。
👆お前にデータ送信してなくて通信量もったいないから寝てていいよ、データ来たら起こすねって感じ。
2. ストレージ機能
データベースと同じデータを保存してくれる。整合性もとってくれる
👆AさんとBさんが同時に保存しようとしても自動でいい感じにする感じ
基本何でも保存できる。画像だろうと
3. 分散システム
スケーラビリティ・局所性・可用性などを兼ね備えている。
👆授業で出てきたやつ!
料理で例えると
丼を作るが何丼を作るか決まっていない状態。
親子丼がFirebase RealTime Database
調理場と丼の入れ物がDurable Objects
食材がJavaScript
調理場と入れ物(Durable Objects)は提供するから色々な食材JavaScriptを使って、カツ丼だったり親子丼だったり、独自の丼(Firebase RealTime DatabaseやSupabase Realtime Database)を作ってね。といった感じ
他の製品と何が違うの?
Firebase RealTime Databaseとの違い
Firebase Realtime Databaseはリアルタイムでデータの保存と通知を行えるAPIを提供している
Durable Objectsはリアルタイムでデータの保存と通知を行えるAPIの開発の基盤を提供している。
Firebase Realtime Databaseはデータを保存・通知のみしかできない。その間に処理を挟むことは不可能
Durable Objectsはデータを保存・通知も行えるし、その間に処理も挟めるし開発者次第で何でもできる。
つまり、Durable Objectsを使ってFirebase Realtime Databaseを作ることができる。
table:table
レイヤー Firebase Realtime Database Cloudflare Durable Objects
API 高レベルAPI(データの保存、取得、同期) 低レベルAPI(データ保存、状態管理、リアルタイム通
データ管理 データ保存とクライアント間のリアルタイム同期 オブジェクトごとの状態管理とリアルタイム通信
実装 リアルタイムデータベースエンジンが処理 開発者が独自のビジネスロジックを実装
インフラストラクチャー Googleのクラウドインフラ上で動作 Cloudflareのクラウドインフラ上で動作
Cloudflare D1
Cloudflare D1とは、Cloudflareが提供しているSQLデータベースのこと。
👆はDurable Objectsを使って開発された製品
Cloudflare R2の開発にもDurable Objectsは使われている
まとめ
Durable Objectsはリアルタイムデータベースなどを構築するための基盤を提供している。
Firebase Realtime Databaseよりも一つ下のレイアーです。
それでは良きDurable Objectsライフを!
dclab Advent Calendar 2024